/**
 *
 * @author DIEGOALV
 */
package ar.republicagroup.gestion.services;

import ar.republicagroup.gestion.entities.BolsaCheque;
import ar.republicagroup.gestion.entities.Cheque;
import ar.republicagroup.gestion.entities.ChequeEstado;
import ar.republicagroup.gestion.entities.Cliente;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.DefaultComboBoxModel;

public interface BolsaChequeServices {
    
    
        public static final int CHEQUE_INGRESADO    = 1;
        public static final int CHEQUE_ACTIVO       = 1;
     
        public List<BolsaCheque> findEntities();		

        public String insert(BolsaCheque beanBolsaCheque);

        public String update(BolsaCheque beanBolsaCheque);

        public BolsaCheque get(Integer id_bolsacheque);

        public String delete(Integer id_bolsacheque);

        public DefaultComboBoxModel combo();
        
        
        
        /**
         * Filtra las bolsas de cheque por distintos filtros .
         * @param cliente , un objeto de tipo Cliente, del cual se van a buscar bolsas de cheques, si es null busca todos .
         * @param fechaDesde , fecha de inicio para buscar las bolsas por un rango de fechas
         * @param fechaHasta , fecha de fin para el rango de fechas que queremos buscar
         * @param chequeEstado , el estado del cheque .
         * @param toLiquid , si es true , se aplica el filtro de fechas de las bolsas listas para liquidacion , si es false no aplica el filtro.
         * @return List<BolsaCheque>
         * @see ar.republicagroup.gestion.dao.BolsaChequeDAO,
         * @see ar.republicagroup.gestion.dao.jpa.BolsaChequeDAOImplJPA
         * @see ar.republicagroup.gestion.dao.CalendarioBancarioDAO
         * @see ar.republicagroup.gestion.dao.jpa.CalendarioBancarioDAOImplJPA
         */
        
        
        public List<BolsaCheque> getBolsaChequeByFilters(Cliente cliente,Date fechaDesde,Date fechaHasta,ChequeEstado chequeEstado,boolean toLiquid,Calendar fechaLiquidacion);        
        /**
         * Obtiene un listado de todos los cheques listos para liquidar de todas las bolsas de cheque asociadas a un cliente . 
         * Filtra solo los cheques con el estado CHEQUE_INGRESADO == 1 
         * @param cliente , el Cliente al cual pertenecen las bolsas de cheques buscadas . 
         * @return List<Cheque>
         */
        public List<Cheque> getChequesToLiquidFromListOfBolsaChequeByCliente(Cliente cliente,Calendar fechaLiquidacion);
        
        
        /**
         * Valida si una bolsa no tiene ningún cheque liquidado
         * @param beanBolsaCheque, la bolsade cheques a validar 
         * @return true si no posee ningún cheque liquidado, sino false .
         */
        
        public boolean isBolsaChequeAvailableToEdit(BolsaCheque beanBolsaCheque);
}
